<? php
    //假设：由数据库获得的数据
	$list = array(
		array('id'=>1,'pid'=>0,'title'=>'a'),
		array('id'=>2,'pid'=>1,'title'=>'b1'),
		array('id'=>3,'pid'=>1,'title'=>'b2'),
		array('id'=>4,'pid'=>8,'title'=>'d1'),
		array('id'=>5,'pid'=>3,'title'=>'c21'),
		array('id'=>6,'pid'=>3,'title'=>'c22'),
		array('id'=>7,'pid'=>3,'title'=>'c23'),
		array('id'=>8,'pid'=>2,'title'=>'c1')
		);
		
	//输出结果
	$out = Array
	(
	    [0] =>  a
	    [1] =>   b1
	    [2] =>    c1
	    [3] =>     d1
	    [4] =>   b2
	    [5] =>    c21
	    [6] =>    c22
	    [7] =>    c23
	);

	/**
	 * 无限级分类的非递归实现wuqh
	 */
	function get_all_child($data, $pid) {
		$layer = 0;
		$result = array();
		$Pid = array($pid);
	loop1:
		$flag = false;
		for ($i=0;$i < count($data);$i ++){
			$node = $data[$i];
			if ($node['pid'] == $Pid[$layer]){
				$layer ++;
				$Pid[$layer] = $node['id'];
				$result[] = blandCount($layer) . $node['title'];
				array_splice($data, $i , 1);
				$flag = true;
				break;
			}
		}
		if ($flag == false){//没有找到
			if ($layer == 0){//结束
				return $result;
			}
			else{
				$layer --;//废弃当前Pid，上跳一层
				goto loop1;
			}
		}
		else {//找到了
			goto loop1;
	 	}
	}
	/**
	 * 根据$layer确定返回'&nbsp;'的数目
	 */
	function blandCount($layer){
		$str = '';
		for($i = 0;$i < $layer;$i ++){
			$str = $str . '&nbsp;';
		}
		return $str;
	}